package cn.schoolwow.quickflow.service.quickFlow.execute;

import cn.schoolwow.quickflow.QuickFlow;
import cn.schoolwow.quickflow.QuickFlowExecutor;
import cn.schoolwow.quickflow.domain.FlowContext;
import cn.schoolwow.quickflow.domain.FlowExecutorOption;
import cn.schoolwow.quickflow.flow.BusinessFlow;
import cn.schoolwow.quickflow.flow.CompositeBusinessFlow;

public interface QuickFlowExecuteOperation {
    /**
     * 构建流程
     * */
    QuickFlowExecutor startFlow(String name);

    /**
     * 构建流程
     * */
    QuickFlowExecutor startFlow(BusinessFlow businessFlow);

    /**
     * 构建流程
     * */
    QuickFlowExecutor startFlow(FlowExecutorOption flowExecutorOption);

    /**
     * 构建流程
     * */
    QuickFlowExecutor startFlow(CompositeBusinessFlow compositeBusinessFlow);

    /**
     * 执行流程
     * */
    FlowContext executeFlow(BusinessFlow... businessFlowList);

    /**
     * 执行流程
     * */
    FlowContext executeFlow(FlowExecutorOption flowExecutorOption);

    /**
     * 执行流程
     * */
    FlowContext executeFlow(CompositeBusinessFlow compositeBusinessFlow);

    /**
     * 克隆流程对象
     * */
    QuickFlow cloneFlow();
}
